package com.ck.client.service;

import com.ck.common.model.OperationResult;
import com.ck.common.model.bo.DeviceReportBO;

/**
 * 客户端与服务端交互逻辑Service
 */
public interface ClientService {
	
	/**
	 * 终端首次注册到平台
	 * @param deviceCode
	 * @param deviceMac
	 * @param intranetIP
	 * @param externalIP
	 * @param modelName
	 * @param softwareVersion
	 * @param firmwareVersion
	 * @param resolution
     * @return
	 */
	OperationResult<Object> deviceRegister( String deviceCode, String deviceMac, String intranetIP,
                                           String externalIP, String modelName, String softwareVersion, String firmwareVersion, String resolution);
	
	/**
	 * 上传日志
	 * @param deviceCode
	 * @param url   文件地址
	 * @param type  日志类型 @see com.ck.constant.LogType
	 */
	OperationResult<Object> uploadLog(String deviceCode, String url, String type);
	
	/**
	 * 终端轮询上报终端信息
	 * @param deviceReport
	 * @return
	 */
	OperationResult<Object> deviceReport(DeviceReportBO deviceReport);
	
	/**
	 * 获取最新设置信息
	 * @param deviceCode
	 * @return
	 */
	OperationResult<Object> getNewestSetting(String deviceCode);
	
	/**
	 *  终端获取最新设置信息后反馈
	 * @param serialNo 批次号
	 * @param deviceCode
	 * @return
	 */
	OperationResult<Object> getNewestSettingReply(Long serialNo,String deviceCode);
	
	/**
	 *  获取最新升级信息
	 * @param deviceCode
	 * @param softwareVersionName 当前软件版本-versionName
	 * @param softwareVersionCode 当前固件版本-versionCode
	 * @param firmwareVer 当前固件版本
	 * @return
	 */
	OperationResult<Object> getUpgrade(String deviceCode,String softwareVersionName,Integer softwareVersionCode,String firmwareVer);
	
	/**
	 *  获取最新升级信息后反馈
	 * @param serialNo 批次号
	 * @param deviceCode
	 * @param softwareVer 当前软件版本
	 * @param firmwareVer 当前固件版本
	 * @return
	 */
	OperationResult<Object> getUpgradeReply(Long serialNo,String deviceCode,String softwareVer, Integer softwareVerCode,String firmwareVer);
	
	/**
	 * 获取最新节目信息
	 * @param deviceCode
	 * @param residualCapacity
     * @return
	 */
	OperationResult<Object> getNewestProgram(String deviceCode, Long residualCapacity);
	
	/**
	 * 获取最新节目信息后反馈
	 * @param serialNo
	 * @param deviceCode
	 * @return
	 */
	OperationResult<Object> getNewestProgramReply(Long serialNo, String deviceCode);
	
	/**
	 * 终端上传节目下载状态
	 * @param deviceCode
	 * @param downloadProgramVersion 下载节目的版本号
	 * @param state 下载状态
	 * @param failureReason 失败原因（如有）
	 * @return
	 */
	OperationResult<Object> uploadProgramDownloadStatus(String deviceCode,String downloadProgramVersion,Integer state,String failureReason);
	
	/**
	 * 外部操作设置，同步到服务端（如：运维人员现场调低音量。需要将该音量值上传到服务器入库）
	 * @param volume
	 * @param deviceCode
	 * @return
	 */
	OperationResult<Object> settingSync(Integer volume, String deviceCode);

	
}
